}
static inline void
-load_vertex_data_with_region (GskQuadVertex vertex_data[GL_N_VERTICES],
- GskRenderNode *node,
- RenderOpBuilder *builder,
- const TextureRegion *r,
- gboolean flip_y)
+load_vertex_data_with_region (GskQuadVertex vertex_data[GL_N_VERTICES],
+ const graphene_rect_t *bounds,
+ RenderOpBuilder *builder,
+ const TextureRegion *r,
+ gboolean flip_y)
{
- const float min_x = builder->dx + node->bounds.origin.x;
- const float min_y = builder->dy + node->bounds.origin.y;
- const float max_x = min_x + node->bounds.size.width;
- const float max_y = min_y + node->bounds.size.height;
+ const float min_x = builder->dx + bounds->origin.x;
+ const float min_y = builder->dy + bounds->origin.y;
+ const float max_x = min_x + bounds->size.width;
+ const float max_y = min_y + bounds->size.height;
const float y1 = flip_y ? r->y2 : r->y;
const float y2 = flip_y ? r->y : r->y2;
ops_set_texture (builder, r.texture_id);
load_vertex_data_with_region (ops_draw (builder, NULL),
- node, builder,
+ &node->bounds, builder,
&r,
FALSE);
}
ops_set_program (builder, &self->programs->blit_program);
load_vertex_data_with_region (ops_draw (builder, NULL),
- child, builder,
+ &child->bounds, builder,
®ion,
is_offscreen);
ops_pop_modelview (builder);
ops_set_texture (builder, region.texture_id);
load_vertex_data_with_region (ops_draw (builder, NULL),
- node, builder,
+ &node->bounds, builder,
®ion,
is_offscreen);
}
ops_set_texture (builder, region.texture_id);
load_vertex_data_with_region (ops_draw (builder, NULL),
- node, builder,
+ &node->bounds, builder,
®ion,
is_offscreen);
}
ops_set_texture (builder, blurred_texture_id);
load_vertex_data_with_region (ops_draw (builder, NULL),
- node, builder,
+ &node->bounds, builder,
&(TextureRegion) { 0, tx1, ty1, tx2, ty2 },
TRUE);
shadow->outline.send = TRUE;
{
- const float min_x = floorf (builder->dx + outline->bounds.origin.x - spread - (blur_extra / 2.0) + dx);
- const float min_y = floorf (builder->dy + outline->bounds.origin.y - spread - (blur_extra / 2.0) + dy);
- const float max_x = ceilf (builder->dx + outline->bounds.origin.x + outline->bounds.size.width +
+ const float min_x = floorf (outline->bounds.origin.x - spread - (blur_extra / 2.0) + dx);
+ const float min_y = floorf (outline->bounds.origin.y - spread - (blur_extra / 2.0) + dy);
+ const float max_x = ceilf (outline->bounds.origin.x + outline->bounds.size.width +
(blur_extra / 2.0) + dx + spread);
- const float max_y = ceilf (builder->dy + outline->bounds.origin.y + outline->bounds.size.height +
+ const float max_y = ceilf (outline->bounds.origin.y + outline->bounds.size.height +
(blur_extra / 2.0) + dy + spread);
- float x1, x2, y1, y2, tx1, tx2, ty1, ty2;
cairo_rectangle_int_t slices[9];
TextureRegion tregs[9];
/* Top left */
if (slice_is_visible (&slices[NINE_SLICE_TOP_LEFT]))
{
- x1 = min_x;
- x2 = min_x + (slices[NINE_SLICE_TOP_LEFT].width / scale_x);
- y1 = min_y;
- y2 = min_y + (slices[NINE_SLICE_TOP_LEFT].height / scale_y);
-
- tx1 = tregs[NINE_SLICE_TOP_LEFT].x;
- tx2 = tregs[NINE_SLICE_TOP_LEFT].x2;
- ty1 = tregs[NINE_SLICE_TOP_LEFT].y;
- ty2 = tregs[NINE_SLICE_TOP_LEFT].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x, min_y,
+ slices[NINE_SLICE_TOP_LEFT].width / scale_x,
+ slices[NINE_SLICE_TOP_LEFT].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_TOP_LEFT], TRUE);
}
/* Top center */
if (slice_is_visible (&slices[NINE_SLICE_TOP_CENTER]))
{
- x1 = min_x + (slices[NINE_SLICE_TOP_LEFT].width / scale_x);
- x2 = max_x - (slices[NINE_SLICE_TOP_RIGHT].width / scale_x);
- y1 = min_y;
- y2 = min_y + (slices[NINE_SLICE_TOP_CENTER].height / scale_y);
-
- tx1 = tregs[NINE_SLICE_TOP_CENTER].x;
- tx2 = tregs[NINE_SLICE_TOP_CENTER].x2;
- ty1 = tregs[NINE_SLICE_TOP_CENTER].y;
- ty2 = tregs[NINE_SLICE_TOP_CENTER].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ const float width = (max_x - min_x) - (slices[NINE_SLICE_TOP_LEFT].width / scale_x +
+ slices[NINE_SLICE_TOP_RIGHT].width / scale_x);
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x + (slices[NINE_SLICE_TOP_LEFT].width / scale_x),
+ min_y,
+ width,
+ slices[NINE_SLICE_TOP_CENTER].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_TOP_CENTER], TRUE);
}
-
/* Top right */
if (slice_is_visible (&slices[NINE_SLICE_TOP_RIGHT]))
{
- x1 = max_x - (slices[NINE_SLICE_TOP_RIGHT].width / scale_x);
- x2 = max_x;
- y1 = min_y;
- y2 = min_y + (slices[NINE_SLICE_TOP_RIGHT].height / scale_y);
-
- tx1 = tregs[NINE_SLICE_TOP_RIGHT].x;
- tx2 = tregs[NINE_SLICE_TOP_RIGHT].x2;
-
- ty1 = tregs[NINE_SLICE_TOP_RIGHT].y;
- ty2 = tregs[NINE_SLICE_TOP_RIGHT].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ max_x - (slices[NINE_SLICE_TOP_RIGHT].width / scale_x),
+ min_y,
+ slices[NINE_SLICE_TOP_RIGHT].width / scale_x,
+ slices[NINE_SLICE_TOP_RIGHT].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_TOP_RIGHT], TRUE);
}
/* Bottom right */
if (slice_is_visible (&slices[NINE_SLICE_BOTTOM_RIGHT]))
{
- x1 = max_x - (slices[NINE_SLICE_BOTTOM_RIGHT].width / scale_x);
- x2 = max_x;
- y1 = max_y - (slices[NINE_SLICE_BOTTOM_RIGHT].height / scale_y);
- y2 = max_y;
- tx1 = tregs[NINE_SLICE_BOTTOM_RIGHT].x;
- tx2 = tregs[NINE_SLICE_BOTTOM_RIGHT].x2;
- ty1 = tregs[NINE_SLICE_BOTTOM_RIGHT].y;
- ty2 = tregs[NINE_SLICE_BOTTOM_RIGHT].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ max_x - (slices[NINE_SLICE_BOTTOM_RIGHT].width / scale_x),
+ max_y - (slices[NINE_SLICE_BOTTOM_RIGHT].height / scale_y),
+ slices[NINE_SLICE_BOTTOM_RIGHT].width / scale_x,
+ slices[NINE_SLICE_BOTTOM_RIGHT].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_BOTTOM_RIGHT], TRUE);
}
/* Bottom left */
if (slice_is_visible (&slices[NINE_SLICE_BOTTOM_LEFT]))
{
- x1 = min_x;
- x2 = min_x + (slices[NINE_SLICE_BOTTOM_LEFT].width / scale_x);
- y1 = max_y - (slices[NINE_SLICE_BOTTOM_LEFT].height / scale_y);
- y2 = max_y;
-
- tx1 = tregs[NINE_SLICE_BOTTOM_LEFT].x;
- tx2 = tregs[NINE_SLICE_BOTTOM_LEFT].x2;
- ty1 = tregs[NINE_SLICE_BOTTOM_LEFT].y;
- ty2 = tregs[NINE_SLICE_BOTTOM_LEFT].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x,
+ max_y - (slices[NINE_SLICE_BOTTOM_LEFT].height / scale_y),
+ slices[NINE_SLICE_BOTTOM_LEFT].width / scale_x,
+ slices[NINE_SLICE_BOTTOM_LEFT].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_BOTTOM_LEFT], TRUE);
}
/* Left side */
if (slice_is_visible (&slices[NINE_SLICE_LEFT_CENTER]))
{
- x1 = min_x;
- x2 = min_x + (slices[NINE_SLICE_LEFT_CENTER].width / scale_x);
- y1 = min_y + (slices[NINE_SLICE_TOP_LEFT].height / scale_y);
- y2 = max_y - (slices[NINE_SLICE_BOTTOM_LEFT].height / scale_y);
- tx1 = tregs[NINE_SLICE_LEFT_CENTER].x;
- tx2 = tregs[NINE_SLICE_LEFT_CENTER].x2;
- ty1 = tregs[NINE_SLICE_LEFT_CENTER].y;
- ty2 = tregs[NINE_SLICE_LEFT_CENTER].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ const float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_LEFT].height / scale_y +
+ slices[NINE_SLICE_BOTTOM_LEFT].height / scale_y);
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x,
+ min_y + (slices[NINE_SLICE_TOP_LEFT].height / scale_y),
+ slices[NINE_SLICE_LEFT_CENTER].width / scale_x,
+ height
+ ),
+ builder,
+ &tregs[NINE_SLICE_LEFT_CENTER], TRUE);
}
/* Right side */
if (slice_is_visible (&slices[NINE_SLICE_RIGHT_CENTER]))
{
- x1 = max_x - (slices[NINE_SLICE_RIGHT_CENTER].width / scale_x);
- x2 = max_x;
- y1 = min_y + (slices[NINE_SLICE_TOP_RIGHT].height / scale_y);
- y2 = max_y - (slices[NINE_SLICE_BOTTOM_RIGHT].height / scale_y);
-
- tx1 = tregs[NINE_SLICE_RIGHT_CENTER].x;
- tx2 = tregs[NINE_SLICE_RIGHT_CENTER].x2;
-
- ty1 = tregs[NINE_SLICE_RIGHT_CENTER].y;
- ty2 = tregs[NINE_SLICE_RIGHT_CENTER].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ const float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_RIGHT].height / scale_y +
+ slices[NINE_SLICE_BOTTOM_RIGHT].height / scale_y);
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ max_x - (slices[NINE_SLICE_RIGHT_CENTER].width / scale_x),
+ min_y + (slices[NINE_SLICE_TOP_LEFT].height / scale_y),
+ slices[NINE_SLICE_RIGHT_CENTER].width / scale_x,
+ height
+ ),
+ builder,
+ &tregs[NINE_SLICE_RIGHT_CENTER], TRUE);
}
/* Bottom side */
if (slice_is_visible (&slices[NINE_SLICE_BOTTOM_CENTER]))
{
- x1 = min_x + (slices[NINE_SLICE_BOTTOM_LEFT].width / scale_x);
- x2 = max_x - (slices[NINE_SLICE_BOTTOM_RIGHT].width / scale_x);
- y1 = max_y - (slices[NINE_SLICE_BOTTOM_CENTER].height / scale_y);
- y2 = max_y;
-
- tx1 = tregs[NINE_SLICE_BOTTOM_CENTER].x;
- tx2 = tregs[NINE_SLICE_BOTTOM_CENTER].x2;
-
- ty1 = tregs[NINE_SLICE_BOTTOM_CENTER].y;
- ty2 = tregs[NINE_SLICE_BOTTOM_CENTER].y2;
-
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ const float width = (max_x - min_x) - (slices[NINE_SLICE_BOTTOM_LEFT].width / scale_x +
+ slices[NINE_SLICE_BOTTOM_RIGHT].width / scale_x);
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x + (slices[NINE_SLICE_BOTTOM_LEFT].width / scale_x),
+ max_y - (slices[NINE_SLICE_BOTTOM_CENTER].height / scale_y),
+ width,
+ slices[NINE_SLICE_BOTTOM_CENTER].height / scale_y
+ ),
+ builder,
+ &tregs[NINE_SLICE_BOTTOM_CENTER], TRUE);
}
/* Middle */
if (slice_is_visible (&slices[NINE_SLICE_CENTER]))
{
- x1 = min_x + (slices[NINE_SLICE_LEFT_CENTER].width / scale_x);
- x2 = max_x - (slices[NINE_SLICE_RIGHT_CENTER].width / scale_x);
- y1 = min_y + (slices[NINE_SLICE_TOP_CENTER].height / scale_y);
- y2 = max_y - (slices[NINE_SLICE_BOTTOM_CENTER].height / scale_y);
-
- tx1 = tregs[NINE_SLICE_CENTER].x;
- tx2 = tregs[NINE_SLICE_CENTER].x2;
-
- ty1 = tregs[NINE_SLICE_CENTER].y;
- ty2 = tregs[NINE_SLICE_CENTER].y2;
-
- ops_draw (builder, (GskQuadVertex[GL_N_VERTICES]) {
- { { x1, y1 }, { tx1, ty2 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
-
- { { x2, y2 }, { tx2, ty1 }, },
- { { x1, y2 }, { tx1, ty1 }, },
- { { x2, y1 }, { tx2, ty2 }, },
- });
+ const float width = (max_x - min_x) - (slices[NINE_SLICE_LEFT_CENTER].width / scale_x +
+ slices[NINE_SLICE_RIGHT_CENTER].width / scale_x);
+ const float height = (max_y - min_y) - (slices[NINE_SLICE_TOP_CENTER].height / scale_y +
+ slices[NINE_SLICE_BOTTOM_CENTER].height / scale_y);
+
+ load_vertex_data_with_region (ops_draw (builder, NULL),
+ &GRAPHENE_RECT_INIT (
+ min_x + (slices[NINE_SLICE_LEFT_CENTER].width / scale_x),
+ min_y + (slices[NINE_SLICE_TOP_CENTER].height / scale_y),
+ width, height
+ ),
+ builder,
+ &tregs[NINE_SLICE_CENTER], TRUE);
}
-
}
}
FORCE_OFFSCREEN | RESET_CLIP))
{
load_vertex_data_with_region (ops_draw (builder, NULL),
- node,
+ &node->bounds,
builder,
&bottom_region,
TRUE);
}
load_vertex_data_with_region (ops_draw (builder, NULL),
- node, builder,
+ &node->bounds, builder,
®ion,
is_offscreen);
}